package entretenimiento.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import entretenimiento.excepcion.DAOExcepcion;
import entretenimiento.modelo.Detalle_dia_Campo;
import entretenimiento.util.ConexionBD;

public class Detalle_dia_CampoDAO extends BaseDAO {
	
	public void insertar(Detalle_dia_Campo so) throws DAOExcepcion {
		
		String query = null;
		if (so.getCoJuego() == 0){			
		 query = "insert into detalle_dia_campo(CoDiaCampo,CoResponsable,NuSecuencia,NuPersonas,SsPrecioPersona,SsImporte,TxtComentario,CoServicio) " +
				"values (?,?,?,?,?,?,?,?)";
		}
		else if (so.getCoServicio() == 0){
			 query = "insert into detalle_dia_campo(CoDiaCampo,CoResponsable,NuSecuencia,NuPersonas,SsPrecioPersona,SsImporte,TxtComentario,CoJuego) " +
						"values (?,?,?,?,?,?,?,?)";
		}
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, so.getCoDiaCampo());
			stmt.setInt(2, so.getCoResponsable());
			stmt.setInt(3, so.getNuSecuencia());
			stmt.setInt(4, so.getNuPersona());
			stmt.setDouble(5, so.getSsPrecioPersona());
			stmt.setDouble(6, so.getSsImporte());
			stmt.setString(7, so.getTxComentario());
			
			if (so.getCoJuego()==0)
			stmt.setInt(8, so.getCoServicio());
			else if (so.getCoServicio()==0)
			stmt.setInt(8, so.getCoJuego());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			/*// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			so.setCoDiaCampo(id);*/

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Collection<Detalle_dia_Campo> detalleCotizacion(int CoDiaCampo) throws DAOExcepcion {
		Collection<Detalle_dia_Campo> lis = new ArrayList<Detalle_dia_Campo>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try{
			con = ConexionBD.obtenerConexion();
			/*String query = "select CoDiaCampo,CoResponsable,NuSecuencia,NuPersonas,SsPrecioPersona,SsImporte,TxtComentario " +
					"CoServicio, CoJuego from detalle_dia_campo where CoDiaCampo=?";*/
			
			String query = "select 'SERVICIO' as tipo, d.CoDiaCampo,d.CoResponsable,d.NuSecuencia,d.NuPersonas,d.SsPrecioPersona,d.SsImporte,d.TxtComentario, " +
					"d.CoServicio,d.CoJuego ,s.NoServicio as Concepto  from detalle_dia_campo d inner join servicio s " +
					"on  d.CoServicio = s.CoServicio  where CoDiaCampo = ? " +
					"union all " +
					"select 'JUEGO' as tipo ,d.CoDiaCampo,d.CoResponsable,d.NuSecuencia,d.NuPersonas,d.SsPrecioPersona,d.SsImporte,d.TxtComentario, " + 
					"d.CoServicio,d.CoJuego,j.NoJuego as Concepto from detalle_dia_campo d inner join juego j " +
					"on  d.CoJuego = j.CoJuego where CoDiaCampo = ? ; ";
			
			stmt = con.prepareStatement(query);
			
			stmt.setInt(1, CoDiaCampo);
			stmt.setInt(2, CoDiaCampo);
			rs = stmt.executeQuery();
			
			while (rs.next()) {
				Detalle_dia_Campo entSolicitud = new Detalle_dia_Campo();
				entSolicitud.setTipo(rs.getString("tipo"));
				entSolicitud.setCoDiaCampo(rs.getInt("CoDiaCampo"));
				entSolicitud.setCoResponsable(rs.getInt("CoResponsable"));
				entSolicitud.setNuSecuencia(rs.getInt("NuSecuencia"));
				entSolicitud.setNuPersona(rs.getInt("NuPersonas"));
				entSolicitud.setSsPrecioPersona(rs.getDouble("SsPrecioPersona"));
				entSolicitud.setSsImporte(rs.getDouble("SsImporte"));
				entSolicitud.setTxComentario(rs.getString("TxtComentario"));	
				entSolicitud.setCoServicio(rs.getInt("CoServicio"));
				entSolicitud.setCoJuego(rs.getInt("CoJuego"));
				entSolicitud.setConcepto(rs.getString("Concepto"));
				lis.add(entSolicitud);
			}
						
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);	
		}
		return lis;		
	}
	
	public Detalle_dia_Campo actualizar(Detalle_dia_Campo entSolicitud) throws DAOExcepcion{
		
		String query = "update detalle_dia_campo set NuPersonas=?,SsImporte=?, " +
				"TxtComentario=? where CoDiaCampo=? and NuSecuencia=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, entSolicitud.getNuPersona());			
			stmt.setDouble(2, entSolicitud.getSsImporte());
			stmt.setString(3, entSolicitud.getTxComentario());				
			stmt.setInt(4, entSolicitud.getCoDiaCampo());
			stmt.setInt(5, entSolicitud.getNuSecuencia());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return entSolicitud;		
	}
}
